Plex.Lib.JS.load('Data.Jax');
Plex.Lib.JS.load('Data.Global');
Plex.Lib.JS.load('Com.DND');

Plex.Com.Navigation = {
	pasteBin: {
		
	},
	
	pasteBinType: 0, /* 0=Cut 1=Copy */
	
	configure:function(object, body, type)
	{
		object.navigation = {
		'body':body,
		'type':type
		}
	},

	DND : new Plex.Com.DND(),

	copy:function(button)
	{

	},
	
	cut:function(button)
	{
		
	},

	navigate: function (button,event)
	{
		if(!event.shiftKey && event.button==0)
		{
			if(button.link_to_page_ID)
			new Plex.Com.Page.load(button.link_to_page_ID);
			else if(button.link_to_product_ID)
			new Plex.Com.Page.load(button.link_to_page_ID);
			else
			Plex.Debug('Nothing To Load');
		}
	},

	move:function(button,to)
	{
		if(!button.allowMove && !button.allowCopy)
		{
			Plex.Debug("Button Is Not Allowed To Move Or Copy");
			return false;
		}
		else if(!button.allowMove)
		return copy_button(Button,Page);

		var newButton = new to.navigation.type();
		newButton.copyFrom(button);

		button.DND.addObj(newButton);

		var
		Jax = new Plex.Data.Jax();
		Jax.feed='Navigation_Map';
		Jax.action='Update';

		if(to.pageId)
		{
			QJax.Var('page_ID',to.pageId);
			QJax.Var('product_ID',0);
		}
		else if(to.productId)
		{
			QJax.Var('product_ID',to.productId);
			QJax.Var('page_ID',0);
		}
		else
		{
			Plex.Debug("Target Has To Identifier");
			return false;
		}

		Plex.Var('navigation_map_ID',button.navigation_map_ID);
		Plex.Call();

		newButton.moveTo(to.body);
		newButton.obj.remove();

		return newButton;
	},

	addNav : function (button,parent)
	{	
		//////////////////////////////////////////////////////////////
		///////////////////////////////////////////////////  FUNCTIONS
		//////////////////////////////////////////////////////////////
		
		button.navigate = function(event)
		{
			Plex.Com.Navigation.navigate(button,event);
		}
		
		button.changeButtonTitle = function()
		{
			Plex.Com.Page.changeButtonTitle({"page_ID":button.link_to_page_ID,"language_ID":button.language_ID});
		}
		
		button.copy = function()
		{
			Plex.Com.Navigation.copy(button);
		}
		
		button.cut = function()
		{
			Plex.Com.Navigation.cut(button);
		}
			
		//////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////  HANDLERS
		//////////////////////////////////////////////////////////////
		
		button.object.onclick=button.navigate;
		
		//////////////////////////////////////////////////////////////
		////////////////////////////////////////////////  CONTEXT MENU
		//////////////////////////////////////////////////////////////
		
		button.context=new Plex.UI.Input.Context(button.object);

		button.context.addOption("Change Button Title",button.changeButtonTitle,'text_allcaps');
		button.context.addBreak();
		button.context.addOption("Copy Button",button.copy,'page_copy');
		button.context.addOption("Cut Button",button.cut,'cut');

//		Self.context.addOption("Move Button",function()
//		{
//			var move_to=prompt("Move Button To Which Position?")
//
//			if(move_to<1)
//			move_to=1;
//
//			BJax = new Jax();
//			BJax.feed = 'Navigation_Map';
//			BJax.action = 'Update';
//			BJax.Var('navigation_map_ID',Self.navigation_map_ID);
//			BJax.Var('row_status_ID',3);
//			BJax.handler=function()
//			{
//				if(move_to<Self.obj.parentNode.childNodes.length)
//				nf_IB(Self.obj.parentNode.childNodes[move_to-1],Self.obj);
//				else
//				nf_A(Self.obj.parentNode,Self.obj);
//			}
//			BJax.Call();
//		})
//		Self.context.addOption("Remove Button",function()
//		{
//			BJax = new Jax();
//			BJax.feed = 'Navigation_Map';
//			BJax.action = 'Update';
//			BJax.Var('navigation_map_ID',Self.navigation_map_ID);
//			BJax.Var('row_status_ID',3);
//			BJax.Call();
//			nf_R(Self.obj);
//
//		})
//		Self.context.addBreak();
//		Self.context.addOption("Close Page",Page.close)

		Plex.Com.Navigation.DND.addObject(button.object);
	},

	load:function(parentObj)
	{
		if(!parentObj.navigation)
		{
			Plex.Debug("No Nav Configured");
			return false;
		}

		var Nav = parentObj.navigation;


		var Jax = new Plex.Data.Jax();

		Jax.handler = function(feed)
		{
			var buttons = feed.getElementsByTagName('results').item(0).childNodes;

			for(i=0;i<buttons.length;i++)
			{
				var	button=buttons[i];
				var new_button = new Nav.type();
				Plex.Com.Navigation.addNav(new_button,parentObj.page);

				new_button.language_ID=button.getAttribute('language_ID');
				new_button.link_to_page_ID=button.getAttribute('link_to_page_ID');
				new_button.link_to_product_ID=button.getAttribute('link_to_product_ID');
				new_button.navigation_map_ID=button.getAttribute('navigation_map_ID');

				if(button.getAttribute('link_to_page_ID'))
				{
					var globName = Global.glob(parentObj.info.language_ID,button.getAttribute('link_to_page_ID'));
					
					with(new_button)
					{
						Global.Page.Button_Title.addWatch(globName,function(value){
							setTitle(value);
						});
						
						Global.Page.File_Content_ID.addWatch(globName,function(value){
							setImage(value);
						});
					}
					
					Global.Page.Button_Title.set(globName,button.getAttribute('title'));
					Global.Page.File_Content_ID.set(globName,button.getAttribute('file_content_ID'));


					//					Global.Page.Title.set(globName,)
				}

				if(button.getAttribute('link_to_product_ID'))
				{
					var globName = Global.glob(parentObj.info.language_ID,button.getAttribute('link_to_product_ID'));
					
					with(new_button)
					{
						Global.Product.Button_Title.addWatch(globName,function(value){
							setTitle(value);
						});
						
						Global.Product.Button_File_Content_ID.addWatch(globName,function(value){
							setImage(value);
						});
					}
					
					Global.Product.Button_Title.set(globName,button.getAttribute('title'));
					Global.Product.Button_File_Content_ID.set(globName,button.getAttribute('file_content_ID'));
				}

				new_button.object.injectInside(Nav.body);
			}

			Nav.onLoad();

		}

		Jax.feed='Navigation_Map';
		Jax.action='Search';

		if(parentObj.info.page_ID)
		{
			Jax.Var('page_ID',parentObj.info.page_ID);
		}
		else if(parentObj.info)
		{
			Jax.Var('product_ID',parentObj.info.product_ID);
		}
		else
		Plex.Debug("No Product Or Page Defined For load_buttons");

		Jax.Var('language_ID',parentObj.info.language_ID);
		Jax.Var('row_status_ID',1);
		Jax.Call();
	}
}

Plex.Com.DND.noTarget=function(obj,realobj)
{
	if(realobj.pn.navigation_map_ID>0)
	{
		BJax = new Jax();
		BJax.feed = 'Navigation_Map';
		BJax.action = 'Update';
		BJax.Var('navigation_map_ID',realobj.pn.navigation_map_ID);
		BJax.Var('row_status_ID',3);
		BJax.Call();

		nf_R(realobj);
		if(realobj.page_ID!=0&&realobj.page_ID!='NULL')
		db("Removing Button "+realobj.navigation_map_ID+" From Page "+realobj.page_ID);
		else if(realobj.product_ID!=0&&realobj.product_ID!='NULL')
		db("Removing Button "+realobj.navigation_map_ID+" From Product "+realobj.product_ID);
		else
		db("BUTTON ERROR");
	}
}